package com.easy.service.impl;

import com.easy.bean.UserAccount;
import com.easy.mapper.UserAccountDao;
import com.easy.service.UserAccountService;
import com.easy.util.Page;
import com.easy.util.PasswordUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserAccountServiceImpl implements UserAccountService {

    @Autowired
    private UserAccountDao userAccountDao;

    @Override
    public UserAccount add(UserAccount userAccount) {
        if (userAccount.getIs_deleted() == null) {
            userAccount.setIs_deleted((byte)0); // 默认未删除
        }
        // 密码加密写入数据库
        if (userAccount.getPassword() != null && !userAccount.getPassword().isEmpty()) {
            String encryptedPassword = PasswordUtil.encryptPassword(userAccount.getPassword());
            userAccount.setPassword_hash(encryptedPassword);
            userAccount.setPassword(null);
        }
        userAccountDao.add(userAccount);
        return userAccountDao.one(userAccount.getId());
    }

    @Override
    public int del(Integer id) {
        UserAccount user = new UserAccount();
        user.setId(id);
        user.setIs_deleted((byte)1);  // 标记为删除
        return userAccountDao.edit(user);  // 调用 edit 实现软删除
    }

    @Override
    public int edit(UserAccount userAccount) {
        // 修改密码时加密写入数据库
        if (userAccount.getPassword() != null && !userAccount.getPassword().isEmpty()) {
            String encryptedPassword = PasswordUtil.encryptPassword(userAccount.getPassword());
            userAccount.setPassword_hash(encryptedPassword);
            userAccount.setPassword(null);
        }
        return userAccountDao.edit(userAccount);
    }

    @Override
    public List<UserAccount> all(String username) {
        return userAccountDao.all(username);
    }

    @Override
    public UserAccount one(Integer id) {
        return userAccountDao.one(id);
    }

    @Override
    public void page(Page page, UserAccount userAccount) {
        int count = userAccountDao.pageCount(userAccount);
        List<UserAccount> data = userAccountDao.page(page, userAccount);
        page.setCount(count);
        page.setData(data);
    }

    @Override
    public UserAccount register(UserAccount userAccount) {
        // 检查用户名
        if (userAccountDao.getByAccount(userAccount.getUsername()) != null) {
            throw new RuntimeException("用户名已存在");
        }

        // 检查邮箱
        if (userAccount.getEmail() != null && !userAccount.getEmail().isEmpty()) {
            if (userAccountDao.getByEmail(userAccount.getEmail()) != null) {
                throw new RuntimeException("邮箱已被注册");
            }
        }

        // 密码加密写入数据库
        String encryptedPassword = PasswordUtil.encryptPassword(userAccount.getPassword());
        userAccount.setPassword_hash(encryptedPassword);
        userAccount.setPassword(null);

        userAccountDao.add(userAccount);

        UserAccount registeredUser = userAccountDao.one(userAccount.getId());
        registeredUser.setPassword_hash(null); // 返回前清空密文
        return registeredUser;
    }
}
